#!/bin/bash

# 当任何命令失败时立即退出
set -e

echo "Starting SGLang EAGLE experiments from a predefined configuration list..."

# --- 定义实验配置列表 (三元组列表) ---
# 每一行都是一个独立的实验配置，格式为: "DRAFT_TOKENS TOP_K NUM_STEPS"


CONFIGS=(
 #"32 8 5"
 #"8 8 5"
 #"28 8 5"
 #"24 8 5"
 "16 8 5"
 #"4 8 5"
 #"2 8 5"
 #"6 8 5"
 #"10 8 5"
 #"12 8 5"
 #"14 8 5"
 #"18 8 5"
 #"20 8 5"
)

#CONFIGS=(
#"6 8 5"
#	)

# 日志文件
LOG_OLD_FILE="logs/experiment_results"


# CONFIGS=()

# for (( i=2; i<=32; i+= )); do
#    CONFIGS+=("($i, 8, 5)")
# done
# CONFIGS=("4 2 3")

# 清空旧的日志文件
#> "$LOG_FILE"

# 遍历配置列表中的每一个三元组
for config_str in "${CONFIGS[@]}"; do
  # 使用 read 命令将字符串分割成三个独立的变量
  # <<< "$config_str" 是一个 "here string"，将字符串作为read命令的输入
  read -r tokens topk steps <<< "$config_str"

  LOG_FILE="${LOG_OLD_FILE}_${tokens}.log"
  > "$LOG_FILE"
  # --- 打印当前运行的配置到终端和日志文件 ---
  echo "=====================================================================" | tee -a "$LOG_FILE"
  echo "RUNNING EXPERIMENT WITH CONFIGURATION: [tokens=$tokens, top_k=$topk, steps=$steps]" | tee -a "$LOG_FILE"
  echo "=====================================================================" | tee -a "$LOG_FILE"

  # --- 执行Python脚本并传入对应的参数 ---
  # 将所有输出 (stdout 和 stderr) 都追加到日志文件中
  python3 test_sglang_spec_lmsys.py \
    --speculative-num-draft-tokens "$tokens" \
    --speculative-eagle-topk "$topk" \
    --speculative-num-steps "$steps" >> "${LOG_FILE}" 2>&1

  echo "Finished experiment for configuration: [tokens=$tokens, top_k=$topk, steps=$steps]"
  echo "" # 添加一个空行，让输出更清晰

done

echo "====================================================================="
echo "All specified experiments have completed!"
#echo "Results have been logged to $LOG_FILE"
